home *** CD-ROM | disk | FTP | other *** search
/ Aminet 21 / Aminet 21 (1997)(GTI - Schatztruhe)[!][Oct 1997].iso / Aminet / dev / misc / gms_dev.lha / GMS / Source / Asm / Demos / Julia.s < prev    next >
Encoding:
Text File  |  1997-07-08  |  6.3 KB  |  327 lines

  1. ;-------T-------T------------------------T----------------------------------;
  2. ;Name:      Julia
  3. ;Author:    Paul Manias
  4. ;Copyright: DreamWorld Productions (c) 1996-1997.  Freely distributable.
  5. ;
  6. ;A fractal generator, not orginally written by myself but now works with GMS.
  7.  
  8.     INCDIR    "INCLUDES:"
  9.     INCLUDE    "games/games_lib.i"
  10.     INCLUDE    "games/games.i"
  11.  
  12.     SECTION    "Julia",CODE
  13.  
  14. ;==========================================================================;
  15. ;                             INITIALISE DEMO
  16. ;==========================================================================;
  17.  
  18.     STARTGMS
  19.  
  20. Start:    MOVEM.L    A0-A6/D1-D7,-(SP)
  21.     move.l    GMSBase(pc),a6
  22.     lea    ScreenTags(pc),a0
  23.     CALL    ShowScreen
  24.     tst.l    d0
  25.     beq.s    Error_Screen
  26.  
  27.     bra.s    Julia
  28.  
  29. Exit:    move.l    GMSBase(pc),a6
  30.     lea    ScreenTags(pc),a0
  31.     CALL    DeleteScreen
  32. Error_Screen
  33.     MOVEM.L    (SP)+,A0-A6/D1-D7
  34.     moveq    #ERR_OK,d0
  35.     rts
  36.  
  37. ;==========================================================================;
  38. ;                                DRAW JULIA
  39. ;==========================================================================;
  40.  
  41. Julia:    lea    DataArea(pc),a5
  42.     move.l    #$fffffffe,(a5)+    ;a5 = $fffffffe+
  43.     move.l    #$80000014,(a5)+    ;a5 = mask & word per raster count
  44.  
  45. StartJulia:
  46.     move.l    GMSBase(pc),a6
  47.     move.l    Screen(pc),a0
  48.     move.l    GS_Bitmap(a0),a0
  49.     CALL    ClearBitmap
  50.  
  51.     move.l    Screen(pc),a0
  52.     move.l    GS_MemPtr1(a0),a0
  53.     lea    JuliaData(pc),a6
  54.     move.l    (a6)+,(a5)    ;a5 = ?
  55. .JuliaFound
  56.     move.w    (a5),MValue    ;initial m
  57.     move.w    (a6),PixStep    ;pixel step
  58.     move.w    (a6)+,RastStep    ;raster step
  59.     move.l    (a6)+,C1C2    ;initial c1 and c2
  60.     move.w    #256,LinesLeft(a5)    ;vertical height
  61.     lea    256*40(a0),a1
  62.     lea    256*40(a1),a2
  63.     lea    256*40(a2),a3
  64.     lea    $04000000,a6    ;for magnitude test
  65.  
  66.     lea    256*40(a3),a4
  67.  
  68.     MOVE.L    A6,-(SP)
  69.     move.l    GMSBase(pc),a6
  70.     CALL    WaitVBL
  71.     MOVE.L    (SP)+,A6
  72.  
  73. PixelLoop:
  74.     move.w    (a5),d1    ;d1 = Initial X
  75.     move.w    InitialY(a5),d0    ;d0 = Initial Y
  76.     moveq    #30,d7    ;d7 = 30.
  77.     movem.w    C1C2(pc),d4-d5    ;MA : d4/d5 = C1/C2
  78.     move.w    d0,d2    ;d2 = Initial Y
  79.     move.w    d1,d3    ;d3 = Initial X
  80.     bra.s    CheckMagnitude
  81.  
  82. IterateJulia:
  83.     sub.l    d3,d2    ;x^2 - y^2
  84.     lsl.l    #4,d2    ;fix decimal point
  85.     swap    d2    ;...
  86.     add.w    d4,d2    ;x1 = x^2 - y^2 + c1
  87.  
  88.     move.w    d1,d3    ;y
  89.     muls    d0,d3    ;x * y
  90.     lsl.l    #5,d3    ;fix decimal point and multiply by 2
  91.     swap    d3    ;...
  92.     add.w    d5,d3    ;y1 = 2 * x * y + c2
  93.  
  94.     move.w    d2,d0    ;x = x1
  95.     move.w    d3,d1    ;y = y1
  96.  
  97. CheckMagnitude:
  98.     muls    d2,d2    ;x^2
  99.     muls    d3,d3    ;y^2
  100.     move.l    d2,d6
  101.     add.l    d3,d6    ;z = x^2 + y^2
  102.     cmp.l    a6,d6    ;escaped yet?
  103.     dbhi    d7,IterateJulia
  104.  
  105.     move.w    PixelMask(a5),d6
  106.     moveq    #0,d5
  107.     move.b    JumpTable+1(pc,d7.w),d5
  108.     jmp    JumpTable(pc,d5.w)
  109.  
  110. JumpTable:
  111.     dc.b    Plot00-JumpTable
  112.     dc.b    Plot31-JumpTable
  113.     dc.b    Plot30-JumpTable
  114.     dc.b    Plot29-JumpTable
  115.     dc.b    Plot28-JumpTable
  116.     dc.b    Plot27-JumpTable
  117.     dc.b    Plot26-JumpTable
  118.     dc.b    Plot25-JumpTable
  119.     dc.b    Plot24-JumpTable
  120.     dc.b    Plot23-JumpTable
  121.     dc.b    Plot22-JumpTable
  122.     dc.b    Plot21-JumpTable
  123.     dc.b    Plot20-JumpTable
  124.     dc.b    Plot19-JumpTable
  125.     dc.b    Plot18-JumpTable
  126.     dc.b    Plot01-JumpTable
  127.     dc.b    Plot16-JumpTable
  128.     dc.b    Plot15-JumpTable
  129.     dc.b    Plot14-JumpTable
  130.     dc.b    Plot13-JumpTable
  131.     dc.b    Plot12-JumpTable
  132.     dc.b    Plot11-JumpTable
  133.     dc.b    Plot10-JumpTable
  134.     dc.b    Plot09-JumpTable
  135.     dc.b    Plot08-JumpTable
  136.     dc.b    Plot07-JumpTable
  137.     dc.b    Plot06-JumpTable
  138.     dc.b    Plot05-JumpTable
  139.     dc.b    Plot04-JumpTable
  140.     dc.b    Plot03-JumpTable
  141.     dc.b    Plot02-JumpTable
  142.     dc.b    Plot17-JumpTable
  143.  
  144. Plot22:    or.w    d6,(a4)
  145.     or.w    d6,(a2)
  146.     or.w    d6,(a1)
  147.     bra.b    Plot00
  148.  
  149. Plot21:    or.w    d6,(a4)
  150.     or.w    d6,(a2)
  151.     or.w    d6,(a0)
  152.     bra.b    Plot00
  153.  
  154. Plot20:    or.w    d6,(a4)
  155.     or.w    d6,(a2)
  156.     bra.b    Plot00
  157.  
  158. Plot18:    or.w    d6,(a4)
  159.     or.w    d6,(a1)
  160.     bra.b    Plot00
  161.  
  162. Plot26:    or.w    d6,(a4)
  163. Plot10:    or.w    d6,(a3)
  164.     or.w    d6,(a1)
  165.     bra.b    Plot00
  166.  
  167. Plot23:    or.w    d6,(a4)
  168.     or.w    d6,(a2)
  169.     or.w    d6,(a1)
  170.     or.w    d6,(a0)
  171.     bra.b    Plot00
  172.  
  173. Plot19:    or.w    d6,(a4)
  174.     or.w    d6,(a1)
  175.     or.w    d6,(a0)
  176.     bra.b    Plot00
  177.  
  178. Plot27:    or.w    d6,(a4)
  179. Plot11:    or.w    d6,(a3)
  180.     or.w    d6,(a1)
  181.     or.w    d6,(a0)
  182.     bra.b    Plot00
  183.  
  184. Plot17:    or.w    d6,(a4)
  185.     or.w    d6,(a0)
  186.     bra.b    Plot00
  187.  
  188. Plot25:    or.w    d6,(a4)
  189. Plot09:    or.w    d6,(a3)
  190.     or.w    d6,(a0)
  191.     bra.b    Plot00
  192.  
  193. Plot29:    or.w    d6,(a4)
  194. Plot13:    or.w    d6,(a3)
  195. Plot05:    or.w    d6,(a2)
  196.     or.w    d6,(a0)
  197.     bra.b    Plot00
  198.  
  199. Plot16:    or.w    d6,(a4)
  200.     bra.b    Plot00
  201.  
  202. Plot24:    or.w    d6,(a4)
  203. Plot08:    or.w    d6,(a3)
  204.     bra.b    Plot00
  205.  
  206. Plot28:    or.w    d6,(a4)
  207. Plot12:    or.w    d6,(a3)
  208. Plot04:    or.w    d6,(a2)
  209.     bra.b    Plot00
  210.  
  211. Plot30:    or.w    d6,(a4)
  212. Plot14:    or.w    d6,(a3)
  213. Plot06:    or.w    d6,(a2)
  214. Plot02:    or.w    d6,(a1)
  215.     bra.b    Plot00
  216.  
  217. Plot31:    or.w    d6,(a4)
  218. Plot15:    or.w    d6,(a3)
  219. Plot07:    or.w    d6,(a2)
  220. Plot03:    or.w    d6,(a1)
  221. Plot01:    or.w    d6,(a0)
  222.  
  223. Plot00:    MOVE.L    D0,-(SP)
  224.     move.w    PixStep(pc),d0
  225.     add.w    d0,(a5)    ;pixel "step"
  226.     MOVE.L    (SP)+,D0
  227.  
  228.     ror.w    PixelMask(a5)    ;shift mask over
  229.     bpl.w    PixelLoop
  230.  
  231.     addq.w    #2,a0
  232.     addq.w    #2,a1
  233.     addq.w    #2,a2
  234.     addq.w    #2,a3
  235.     addq.w    #2,a4
  236.     subq.w    #1,WordsInRaster(a5)    ; subtract from word counter
  237.     bne.w    PixelLoop
  238.  
  239.     MOVE.L    A6,-(SP)
  240.     move.l    GMSBase(pc),a6
  241.     CALL    AutoSwitch
  242.     MOVE.L    (SP)+,A6
  243.  
  244.     btst.b    #6,$bfe001
  245.     beq    Exit
  246.  
  247.     move.w    #320/16,WordsInRaster(a5) ; words per raster
  248.     btst.b    #2,$dff016    ;new julia?
  249.     beq.b    NewJulia
  250.  
  251. RasterInit:
  252.     move.w    MValue(pc),(a5)    ;inital M value
  253. RasterAdd:
  254.     MOVE.L    D0,-(SP)
  255.     move.w    RastStep(pc),d0
  256.     add.w    d0,InitialY(a5)    ; raster "step"
  257.     MOVE.L    (SP)+,D0
  258.     subq.w    #1,LinesLeft(a5)
  259.     bne.w    PixelLoop
  260.  
  261. WaitMouse:
  262.     btst.b    #6,$bfe001
  263.     beq    Exit
  264.     btst.b    #2,$dff016
  265.     bne.b    WaitMouse
  266.  
  267. NewJulia:
  268.     btst.b    #2,$dff016
  269.     beq.b    NewJulia
  270.     bra.w    StartJulia
  271.  
  272. ;===========================================================================;
  273. ;                                  DATA
  274. ;===========================================================================;
  275.  
  276. MValue:    dc.w    0
  277. PixStep:
  278.     dc.w    0
  279. RastStep:
  280.     dc.w    0
  281. C1C2:    dc.l    0
  282.  
  283. ScreenTags:
  284.     dc.l    TAGS_GAMESCREEN
  285. Screen:    dc.l    0
  286.     dc.l    GSA_Palette,.palette
  287.     dc.l    GSA_ScrWidth,320
  288.     dc.l    GSA_ScrHeight,256
  289.     dc.l    GSA_Planes,5
  290.     dc.l    GSA_ScrType,PLANAR
  291.     dc.l    TAGEND
  292.  
  293. .palette
  294.     dc.l    $000000,$803010,$0000e0,$0000d0,$0000c0,$0000b0,$0000a0,$000090
  295.     dc.l    $000080,$000070,$100060,$200050,$300040,$400030,$500020,$601010
  296.     dc.l    $702000,$0000f0,$904020,$a05030,$b06040,$c07050,$d08060,$c09070
  297.     dc.l    $b0a080,$a090a0,$9080b0,$807090,$706070,$505050,$304030,$103010
  298.  
  299. JuliaData:
  300.     dc.l    $f800eb00
  301.     dc.w    $0018,$0100,$0ad0,$ec00
  302.  
  303.     dc.l    $fd21eeae
  304.     dc.w    $0225,$000d,$f420,$fd43
  305.  
  306.     dc.l    $ef000010
  307.     dc.w    $0600,$0100,$f226,$fd56
  308.  
  309.     dc.l    $0015ee00
  310.     dc.w    $fb40,$ede2,$f0b2,$001d
  311.  
  312.     dc.l    $05c0ff00
  313.     dc.w    $ef12,$e812,$001d,$f320
  314.     dc.l    0
  315.  
  316.  
  317.     rsset    -4
  318. PixelMask rs.w    1    ;mask to "OR" with bitplanes
  319. WordsInRaster rs.w 1    ;number of words left in current raster
  320. InitialX rs.w    1    ;inital x
  321. InitialY rs.w    1    ;inital y
  322. LinesLeft rs.w    1    ;number of lines left to draw
  323.  
  324.     dc.l    0
  325. DataArea:
  326.     ds.b    40
  327.